package com.medicalsystem.service;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Service
public class LogExportService {

    // 日志文件存储目录
    private static final String LOG_DIR = "logs";

    // 导出日志文件存储目录
    private static final String EXPORT_DIR = "exported-logs";

    // 每天下午4:20执行
    @Scheduled(cron = "0 31 16 * * ?")
    public void exportDailyLogAtSpecificTime() {
        exportLogForToday("下午4:20导出");
    }

    // 每5分钟执行一次
    @Scheduled(cron = "0 */1 * * * ?")
    public void exportLogEveryFiveMinutes() {
        exportLogForToday("每5分钟导出");
    }

    // 通用日志导出方法
    private void exportLogForToday(String logType) {
        try {
            // 获取当天日期
            String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

            // 日志文件路径
            String logFileName = "application-" + today + ".log";
            Path logFilePath = Path.of(LOG_DIR, logFileName);

            // 调试日志路径
            System.out.println(logType + "：检查日志文件路径：" + logFilePath.toAbsolutePath());

            // 检查日志文件是否存在
            if (!Files.exists(logFilePath)) {
                System.out.println(logType + "：当天日志文件不存在：" + logFilePath);
                return;
            }

            // 创建导出目录（如果不存在）
            Path exportDir = Path.of(EXPORT_DIR);
            if (!Files.exists(exportDir)) {
                Files.createDirectories(exportDir);
            }

            // 导出文件路径
            Path exportedLogFile = exportDir.resolve(logFileName);

            // 复制日志文件到导出目录
            Files.copy(logFilePath, exportedLogFile, StandardCopyOption.REPLACE_EXISTING);

            // 成功提示
            System.out.println(logType + "：日志导出成功：" + exportedLogFile.toAbsolutePath());
        } catch (IOException e) {
            // 错误提示
            System.err.println(logType + "：日志导出失败：" + e.getMessage());
        }
    }
}
